package g

/*
 * @lc app=leetcode.cn id=20 lang=golang
 *
 * [20] 有效的括号

给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
有效字符串需满足：

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
*/

// @lc code=start
func isValid(s string) bool {
	brackets := map[byte]byte{'}': '{', ']': '[', ')': '('}
	var stashBrackets []byte
	for i := 0; i < len(s); i++ {
		c := s[i]
		if c == '{' || c == '[' || c == '(' {
			stashBrackets = append(stashBrackets, c)
			continue
		}
		if value, ok := brackets[c]; ok {
			if len(stashBrackets) > 0 && value == stashBrackets[len(stashBrackets)-1] {
				stashBrackets = stashBrackets[:len(stashBrackets)-1]
			} else {
				return false
			}
		} else {
			return false
		}
	}
	if len(stashBrackets) == 0 {
		return true
	}
	return false
}

// @lc code=end
